package com.servlet.track;

import com.repository.TrackRepo;
import com.util.Log;
import com.view_object.UserVO;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

/**要接收entype= multipart/formdata  form表单数据，就必须用@MultipartConfig进行修饰
 * 如果不写，就会出现500错误
 *
 * 这里我遇到了一个错误，就是我上传的音乐过大，默认的缓冲区不足以支撑
 * 我换了一个音质相对差一点的音乐，立马就好了
 * @author yuisama
 * @date 2023/03/07 20:27
 **/

@WebServlet("/studio/track/upload.do")
@MultipartConfig
public class UploadDoServlet extends HttpServlet {
    private final TrackRepo trackRepo = new TrackRepo();
    //一定要New,不new 会出现空指针异常
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.如果用户没有登陆，直接提示用户必须先登录
        UserVO userVO = null;
        HttpSession session = req.getSession(false);
        if(session != null){
            userVO = (UserVO) session.getAttribute("currentUser");
            //session中的用户，是登陆时放进去的
        }
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/plain");
        PrintWriter writer = resp.getWriter();
        if(userVO == null){
            Log.println("用户未登录！");
            //用户没有登陆
            return;
        }
        //说明用户已经登陆了
        Log.println("当前登陆用户为："+ userVO);
        //2.从请求中获取我们需要的信息
        req.setCharacterEncoding("utf-8");
        String title = req.getParameter("title");
        Log.println("获取到的title是：" + title);

        Part track = req.getPart("track");
        String type = track.getContentType();
        Log.println("获取到的type是:"+ type);
        //可以通过InputStream中读取音频内容
        InputStream contentInputStream = track.getInputStream();

        //3.将拿到的数据，插入到表中，由于做的操作比较简单，就不引入service了，直接使用trackRepo
        TrackRepo.insert(userVO.uid,title,type,contentInputStream);
        Log.println("上传成功");

        //4.响应插入成功
        writer.println("上传成功");
    }
}

